package com.exam.mapper;

import java.util.List;
import java.util.Map;

import com.exam.pojo.Student;

/**
 * @author 郭荣锋
 * 学生的DAO
 */
public interface StudentMapper {

	/**
	 * 通过学号去获取学生对象
	 * @param sno 学号
	 * @return 学生对象
	 */
	Student getStudentBySno(String sno);
	
	/**
	 * 添加学生
	 * @param student 学生对象 
	 * @return 
	 */
	void addStudent(Student student);
	
	/**
	  *  生成学号
	 * @param student 学生编号 
	 * @param classesId 班级编号
	 * @return 生成的学号
	 */
	String createSno(Integer studentId, Integer classesId);
	
	/**
	  * 获取学生在班级中的座号
	 * @param studentId 学生对象
	 * @return 座号
	 */
	Integer getSeatNumberInClasses(Student student);
	
	/**
	 * 删除学生
	 * @param student 学生对象
	 * @return void 
	 */
	void deleteStudent(Student student);
	
	/**
	 * 更新学生
	 * @param student 学生对象
	 * @return void
	 */
	void updateStudent(Student student);
	
	/**
	 * 通过班级编号获取班级里面所有的学生
	 * @param classesId 班级编号
	 * @return List<Student> 学生列表
	 */
	List<Student> getStudentByClassesId(Integer classesId);
	
	/**
	  *   通过学生ID获取学生对象
	 * @param studentId 学生ID
	 * @return 学生对象
	 */
	Student getStudentById(Integer studentId);
	
	/**
	 * 通过专业ID获取学生列表
	 * @param majorId 专业ID
	 * @return List<Student> 学生列表
	 */
	List<Student> getStudentByMajorId(Integer majorId);
	
	/**
	  *  以分页的形式获取学生列表
	 * @param void
	 * @return 分页的学生列表
	 */
	List<Student> getStudentByPaging(Map<Object, Object> map);
 
	/**
	  * 获取学生总记录数
	 * @param map 参数列表(可选:majorId 专业编号,classesId 班级编号)
	 * @return 总记录数
	 */
	Integer getTotalCount(Map<Object, Object> map);
	
	/**
	 * 根据学生ID更新学生对象
	 * @param student 学生对象
	 * @return void
	 */
	void updateStudentById(Student student);
	
	/**
	 * 以分页的形式获取被删除的学生列表
	 * @return
	 */
	public List<Student> getDeletedByPaging(Map<Object,Object> map);
	
	/**
	 * 通过被删除的学生ID获取学生对象 
	 * @param studentId 学生ID
	 * @return 学生对象
	 */
	public Student getDeletedStudentById(Integer studentId);
	
	/**
	 * 获取被删除的学生总数
	 * @param void
	 * @return 被删除的学生总数
	 */
	public Integer getDeletedStudenTotalCount(Map<Object,Object> map);
	
}
